#include <my_header.h>
// 服务器端 一问一答的方式
/* Usage: ./1_socket_server */
int main(void){                                  

    // 服务器端IP和端口
    char *sourIp = "192.168.229.128";
    char *sourPort = "8080";

    // 创建socket对象获得文件描述符
    int socketFd = socket(AF_INET, SOCK_STREAM, 0);
    ERROR_CHECK(socketFd, -1, "socket");

    // ip转换为网络字节序 
    struct in_addr inAddr;
    inet_aton(sourIp, &inAddr);

    // 端口转为int类型
    int sourPortInt = atoi(sourPort);
    int sourPortNext = htons(sourPortInt);

    // 构建struct sockaddr 类型
    struct sockaddr_in socketAddr;
    socketAddr.sin_family = AF_INET;
    socketAddr.sin_port = sourPortNext;
    socketAddr.sin_addr = inAddr;

    // bin:绑定端口
    int res_bind = bind(socketFd, (struct sockaddr *) &socketAddr, sizeof(socketAddr));
    ERROR_CHECK(res_bind, -1, "bind");

    // listen:监听端口
    int res_lis = listen(socketFd, 10);
    ERROR_CHECK(res_lis, -1, "listen");

    // accept:获取连接
    // 打印对端的ip地址可设置参数
    // 全连接队列/半连接队列的文件描述符
    int connecFd = accept(socketFd, NULL, NULL);
    ERROR_CHECK(connecFd, -1, "accept");

    while(1)
    {
        char buf2[60] = { 0 };
        // 读取对方的输入
        int res_recv = recv(connecFd, buf2, sizeof(buf2), 0);
        ERROR_CHECK(res_recv, -1, "recv");
        ERROR_CHECK(res_recv, 0, "other close");

        char buf[60] = { 0 };
        // 读取标准输入
        read(STDIN_FILENO, buf, sizeof(buf) -1);

        // 把标准输入，发送给服务器
        int res_send = send(connecFd, buf, sizeof(buf), 0);
        ERROR_CHECK(res_send, -1, "send");

    }
    close(socketFd);
    close(connecFd);
    return 0;
}


